/**
 * 
 */
package com.yidu.erp.service.stock;

import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;

import com.yidu.common.SsmMessage;
import com.yidu.erp.dao.BeyondInventoryMapper;
import com.yidu.erp.model.BeyondInventory;

/**
 * 类的描述：库存service的实现类
 * @author xym
 *
 * @date 2017年11月24日
 */
@Service
public class StockServiceImpl implements StockService {
	
	@Resource
	private BeyondInventoryMapper inventory;
	
	@Override
	public Map<String, Object> showAll(Map<String, Object> map) {
		//新建一个返回出去的map
		Map<String, Object> resultMap=new HashMap<String,Object>();
		//得到药品库存的集合传入map集合中
		resultMap.put("data", inventory.showAll(map));
		//放入layui显示必须的编码
		resultMap.put("code", 0);
		//放入layui显示必须的消息
		resultMap.put("msg", 0);
		//放入查询出来的总行数
		resultMap.put("count", inventory.showAllCount(map));
		return resultMap;
	}

	/* (non-Javadoc)
	 * @see com.yidu.erp.service.stock.StockService#addOrMinus(com.yidu.erp.model.BeyondInventory, java.lang.String)
	 */
	@Override
	public SsmMessage addOrMinus(BeyondInventory beyondInventory, String symbol) {
		//定义一个为0的执行行数
		int row=0;
		if ("+".equals(symbol)) {//当传入进来的符号等于加号时
			if(inventory.findCountById(beyondInventory)>0){//当查询该记录大于0时
				//调用增加方法得到执行行数
				row=inventory.addCountById(beyondInventory);
			}else{
				//调用增加记录的方法
				row=inventory.addRecordById(beyondInventory);
			}
		}else if("-".equals(symbol)){//当传入进来的符号等于减号的时候
			if(inventory.findCountById(beyondInventory)>0){//当查询该记录大于0时
				//调用减少库存的方法
				row=inventory.minusCountById(beyondInventory);
			}else{
				//执行行数为0
				row=0;
			}
		}else{
			//执行行数为0
			row=0;
		}
		//新建消息对象
		SsmMessage mes=new SsmMessage();
		if(row>0){//当执行行数大于0时
			//消息设置为成功的消息
			mes.setMes(SsmMessage.SUCCESS_MES);
			//消息状态为成功
			mes.setState(SsmMessage.SUCCESS);
		}else{
			//消息设置为失败消息
			mes.setMes(SsmMessage.ERROR_MES);
			//详细状态为失败
			mes.setState(SsmMessage.ERROR);
		}
		return mes;
	}

	/* (non-Javadoc)
	 * @see com.yidu.erp.service.stock.StockService#showAllDos(java.util.Map)
	 */
	@Override
	public Map<String, Object> showAllDos(Map<String, Object> map) {
		//新建一个返回出去的map集合
		Map<String, Object> resultMap=new HashMap<String,Object>();
		//得到配料库存的集合传入map集合中
		resultMap.put("data", inventory.showAllDos(map));
		//放入layui显示必须的编码
		resultMap.put("code", 0);
		//放入layui显示必须的消息
		resultMap.put("msg", 0);
		//放入查询出来的总行数
		resultMap.put("count", inventory.showAllDosCount(map));
		return resultMap;
	}

	/* (non-Javadoc)
	 * @see com.yidu.erp.service.stock.StockService#isEnough(java.lang.String, int)
	 */
	@Override
	public Map<String, Object> isEnough(String wareId, int num) {
		//新建一个map作为传入查询的参数
		Map<String, Object> map=new HashMap<String,Object>();
		//设置药品编号
		map.put("wareId", wareId);
		//设置药品的数量
		map.put("num", num);
		//调用方法返回配料集合
		List<Map<String,Object>> dosList=inventory.findByDos(map);
		//新建一个map对象作为返回的值
		Map<String, Object> result=new HashMap<String,Object>();
		//设置一个默认为1的状态
		int state=1;
		//将map中的所有值迭代
		for (Iterator<Map<String, Object>> iterator = dosList.iterator(); iterator.hasNext();) {
			//得到map的值
			Map<String, Object> dos = iterator.next();
			//如果有状态为库存不足则将状态改为0
			if((long)dos.get("state")==0)state=0;
		}
		//如果得到的集合长度为0则将状态改为0;
		if(dosList.size()==0)state=0;
		//将得到的配料集合传入返回出去的map中
		result.put("dosList", dosList);
		//将是否能提交的状态传入返回出去的map中
		result.put("state", state);
		return result;
	}

}
